#include "ti_msp_dl_config.h"
#include "app_gyro_pid.h"//定点转pid
#include "app_angle_control.h"//角度pid
#include "app_position_pid.h"//循迹pid
#include "app_question_task.h"//任务状态机
#include "mid_pid.h"
#include "mid_remind.h"
#include "mid_tjc.h"
#include "hw_jy901s.h"
#include "hw_tjc_usart_hmi.h"
#include "stdio.h"

#define FRAME_LENGTH 7
#define PID_LENGTH 3
uint8_t task_state = 0;

int a = 100;
char str[100];
uint32_t last_time = 0;

void tjc_timer_init(void)
{
    NVIC_ClearPendingIRQ(UART_0_INST_INT_IRQN);
	// 使能串口中断
	NVIC_EnableIRQ(UART_0_INST_INT_IRQN);
	initRingBuff();
}



// void tjc_send(void)
// {
// 	if (now_time - last_time >= 1000)
// 		{
// 			last_time = now_time;
// 			sprintf(str, "n0.val=%d", a);
// 			tjc_send_string(str);
// 			sprintf(str, "t0.txt=\"hahah%d\"\xff\xff\xff", a);
// 			tjc_send_string(str);
// 			sprintf(str, "click b0,1\xff\xff\xff");
// 			tjc_send_string(str);
// 			delay_ms(50);
// 			sprintf(str, "click b0,0\xff\xff\xff");
// 			tjc_send_string(str);

// 			a++;
// 		}    
// }
//任务检测函数
void tjc_task(void)
{
	printf("jinru\r\n");
	if (u(2) == 0x01)
	{
		if (u(3) == 0x01)
		{
			task_state = 1;
		}
		else 
		{
			task_state = 0;						
		}
		}
	else if(u(2) == 0x02)
	{
		if (u(3) == 0x01)
		{
			task_state = 2;
		}
		else 
		{
			task_state = 0;						
		}
	}
	else if(u(2) == 0x03)
	{
		if (u(3) == 0x01)
		{
			task_state = 3;
		}
		else 
		{
			task_state = 0;						
		}
	}                    
	else if(u(2) == 0x04)
	{
		if (u(3) == 0x01)
		{
			task_state = 4;
		}
		else 
		{
			task_state = 0;						
		}
	}
	else 
	{
		task_state = 0;						
	}
	udelete(7); // 删除解析过的数据
}


/********************************************************
函数名：  	tjc_PID
作者：    	
日期：    	2024.08.18
功能：    	改变目标PID的值
输入参数：	目标PID的结构体
返回值： 	无
修改记录：
**********************************************************/
void tjc_PIDchange(PID* pid, uint16_t datalength)
{
	uint8_t t;
	int val=0;
	printf("length=%d\r\n",datalength);
	// printf("length=%d\r\n",u(0));
	printf("length=%d\r\n",u(datalength - 1));			
	// 校验帧头帧尾是否匹配
	// printf("chen");
	//数据解析
	for(t = 4; t<(datalength - 1); t++)
	{
		val=val*10+(u(t)-'0');
		printf("val=%d\r\n",val);
	}
	// 匹配，进行解析
	if (u(3) == 'P')
	{
		pid->kp = val;
	}
	else if (u(3) == 'I')
	{
		pid->ki = val;
	}
	else if (u(3) == 'D')
	{
		pid->kd = val;
	}
	udelete(datalength); // 删除解析过的数据
	printf("KP=%1f KI=%1f KD=%1f\r\n",pid->kp,pid->ki,pid->kd);

}
void tjc_UIpage(void)
{
	uint16_t datalengths = usize;
    while (usize >= 2)
	{
		// 校验帧头帧尾是否匹配
		if (usize >= 2 && u(0) == 0x55 && u((datalengths - 1)) == 0xff)
		{
			if (u(1) == 0x01)//进入任务界面
			{
				tjc_task();
			}
			else if(u(1) == 0x02)//进入PID调节页面
			{
				if(u(2) == 0x01)//循迹PID
				{
					printf("xunji\r\n");
					tjc_PIDchange(&tracing_pid,datalengths);
				}
				else if(u(2) == 0x02)//进入定点转PID
				{
					printf("dingdian\r\n");
					tjc_PIDchange(&gyro_pid,datalengths);				
				}
				else if(u(2) == 0x03)//进入直线PID
				{
					printf("zhixian\r\n");
					tjc_PIDchange(&angle_pid,datalengths);				
				}
			}
			else if(u(1) == 0x03)//强制停止
			{
				if(u(2) == 0x01)
				{
					printf("stop\r\n");
					stop_motor();
					State_Machine.Main_State = STOP_STATE;
				}

			}
		}
		else
		{
			// 不匹配删除1字节
			udelete(1);
			break;
		}
	}
}